فصل چهارم کار با متدها و کالس های آماده تاکنون با تعدادی از متدها و کالس های سی شارپ کار کرده اید.این متدها و کالس ها از قبل آماده و درون ساختار سی شارپ تعبیه شده است که می توانیم از آنها در برنامه های خود استفاده کنیم و به این طریق برنامه خود را به راحتی و با قدرت بیشتر بنویسیم. کتابخانهFramework.NET به فراوانی دارای این کالس ها و متد هاست.در این فصل برای نمونه به سه کالس اشاره می کنیم که کاربرد های زیادی در برنامه های شما خواهد داشت. پس از پایان این فصل انتظار می رود که فراگیر بتواند: ١ اجزای خط عنوان یک متد را توضیح دهد. ٢ ورودی ها و خروجی های یک متد را نام ببرد. ٣ با کالس math و متدهای پرکاربرد آن برنامه بنویسد. ٤ از کالس array و متدهای sort و search این کالس در برنامه های خود استفاده کند. ٥ کاربرد کالس string را بیان نماید و با استفاده از متدهای این کالس برنامه بنویسد. 98
۱ ۴ کالس Math برای انجام محاسبات ریاضی عالوه بر چهار عمل اصلی نیاز به عملگرهای دیگری نظیر توان و یا عمل جذر و غیره می باشد. زبان #C از طریق کتابخانه.Net انواع توابع ریاضی مثلثاتی و لگاریتمی را برای برنامه نویس فراهم نموده است. این توابع به صورت متدهای استاتیک در کالس Math تعریف شده اند. در این قسمت با تعدادی از آنها که ساده می باشند آشنا می شویم. البته قرار نیست اینجا ریاضیات کار کنیم اما خواهید دید به راحتی می توانید کار محاسبه را به برنامه خود واگذارید. به محض نوشتن نام کالس Math و عالمت نقطه لیستی از متدهای کالس Math به وسیل ه IntelliSense نشان داده می شود. شکل ١ ٤ لیست متدهای کالس Math با حرکت در لیست مربوطه در مورد هر یک از متدها توضیحی ظاهر می شود. این توضیح شامل خط عنوان متد و عملکرد آن است. در واقع شناسنامه متد نشان داده می شود. در ادامه به توضیح برخی متدهای کالس Math می پردازیم. ١ ١ ٤ متد ( ) Pow ورودی های این متد دو عدد x و y از نوع اعشاری با دقت باال است و متد نیز یک عدد اعشاری دقت باال که حاصل x به توان y است را تولید نموده و به برنامه اصلی باز می گرداند. مثال برای محاسبه عبارت ٥ به توان ٢ کافی است اعداد ٥ و ٢ را به این متد ارسال کنیم و این متد نیز پس از اجرا عدد ٢٥ را بر می گرداند. از مقدار برگشتی می توان استفاده کرد. به عنوان مثال آن را داخل یک متغیر بریزیم و در یک عملیات دیگر مانند چاپ از آن بهره بگیریم: 99
double number = Math. Pow (5, 2); Console. WriteLine (number); البته می توانیم به صورت مستقیم نیز مقدار برگشتی را چاپ کنیم: Console. WriteLine (Math.Pow (5, 2); و یا مقدار خروجی را استفاده نکرد و دور ریخت! Math.Pow (5, 2); عملکرد متد Pow را می توان به صورت شکل زیر نشان داد: ورودی ها a b متد توان Pow خروجی a b شکل ٢ ٤ عملکرد متد Pow مثال ۱ ٤ : با اجرای برنامه زیر عدد ۲ به توان اعداد مختلف )از توان صفر تا ١٦( روی صفحه نمایش نشان داده می شوند. class mathdemo { static void Main ( ) { for (int i = 0; i < = 16; i++) { double number = Math. Pow (2, i); Console. WriteLine (number); } } } 100 برنامه ١ ٤ نمایش توان های مختلف عدد ٢
نکته کالس Math در فضای نامی System تعریف شده است و برای استفاده از متدهای آن باید نام System قبل از نام کالس نیز ذکر گردد و یا در ابتدای برنامه با دستور using حوزه System به برنامه معرفی شود. در جدول زیر لیستی از متدهای ریاضی نشان داده شده است. این متدها از کالس Math هستند. جدول ١ ٤ برخی متدهای ریاضی از کالس Math نام متد کاربرد شکل کلی مثال Math.Cos(10 ) )عدد ) Math.Cos کسینوس یک زاویه برحسب رادیان را حساب میکند. Cos Math. Log(16, 2) )مبنا عدد( Math. Log لگاریتم عدد را در مبنای تعیین شده حساب میکند. Log Math.Max(10, 20) عدد بزرگ تر از بین دو عدد را پیدا می کند. )عدد عدد( Math.Max Max Math.Min(10, 20) Math.Min عدد کوچک تر از بین دو عدد پیدا می کند. )عدد عدد( Min Math.Pow(10,3) حاصل عدد به توان تعیین شده را حساب میکند. )توان عدد( Math.Pow Pow Math.Round(10.7) )عدد( Math.Round Round عدد را گرد می کند. Math.Sin(20) )عدد( Math.Sin سینوس یک زاویه برحسب رادیان را حساب میکند. Sin Math.Sqrt(100) )عدد( Math.Sqrt جذر عدد را حساب میکند. همان رادیکال خودمان. Sqrt Math.Tan(20) )عدد( Math.Tan تانژانت یک زاویه برحسب رادیان را حساب میکند. Tan Math.Truncate (10.5) Math.Truncate بخش اعشار عدد را حذف می کند. )عدد( Truncate 101
٢ ١ ٤ عدد π: برای محاسبه مساحت دایره نیاز به عدد π است. این عدد گنگ از حاصل تقسیم محیط دایره بر اندازه قطر به دست می آید و برای تمامی دایره ها ثابت و در حدود ٣/١٤ است. 1 اگر نیاز به دقت بیشتری در محاسبات داشتید می توانید از ثابت PI که در کالس Math تعریف شده است استفاده کنید. Math. PI توجه داشته باشید که PI متد نیست بلکه یک ثابت است. می توانید مقدار آن را در یک متغیر اعشاری ذخیره کنید و یا به متد WriteLine() برای چاپ ارسال کنید: Console. WriteLine (Math. PI); فرض کنید: می خواهیم اندازه مساحت دایره ای را محاسبه و نمایش دهیم که کاربر اندازه شعاع آن را وارد می کند. الگوریتم و روش انجام کار: برای محاسبه مساحت 2 دایره از فرمول πr 2 استفاده می کنیم که منظور از r شعاع 3 دایره است. کنجکاوی بررسی کنید متد Abs چه عملی انجام می دهد / / Area of a Circle = πr2 double area = Math. PI Math. Pow (radius, 2); Pi= 3/14159265358979323846 1 Area 2 Radius 3 102
١ برنامه زیر را در محیط VS تایپ کرده و نتیجه اجرای آن را مشاهده کنید: using System; class Program { static void Main ( ) { Console. WriteLine (Math.Max(100, 200) ); //200 Console. WriteLine (Math.Max(-100, -200) ); Console. WriteLine (Math.Min(100, 200) ); //100 Console. WriteLine (Math.Min(-100, -200) ); Console. WriteLine (Math.Pow (2, 3) ); //8 Console. WriteLine (Math.Pow(-2, 3) ); Console. WriteLine (Math.Round(18.5) ); / /19 Console. WriteLine (Math.Round(18.25) ); Console. WriteLine (Math.Sqrt (225) ); / /15 Console. WriteLine (Math.Sqrt (200) ); کار در کارگاه 1 } } Console. WriteLine (Math.Truncate (1.23) ); / /1 Console. WriteLine (Math.Truncate (1.54) ); برنامه ٢ 4 آزمایش متدهای کالس Math 2 خروجی هر خط برنامه را بنویسید. نتیجه خروجی بعضی از خطوط برنامه نوشته شده است. 103
مثال ٢ ٤ : برنامه ای بنویسید که ١۰ عدد را بگیرد و کمترین آنها را نمایش دهد. الگوریتم و روش انجام کار: برنامه محاسبه کمترین عدد را سال گذشته نوشته اید. با توجه به اینکه در فصل ٢ آرایه را یاد گرفته اید این برنامه را با آرایه می نویسیم. برای این منظور پس از تعریف متغیر آرایه ای برای دریافت اعداد از حلقه for کمک می گیریم. سپس اولین عدد را به عنوان کمترین عدد لیست در متغیر min می ریزیم و از عدد دوم تا انتهای لیست عمل مقایسه و ریختن در متغیر min را در صورت نیاز انجام می دهیم. متد Min کالس math به ما کمک می کند تا عمل مقایسه زیر را با دستور انتساب جایگزین کنیم )برنامه ٣ ٤ (. if (min < arr [i]) min = arr[i]; 104 کار در کارگاه 2 سؤال: با توجه به برنامه زیر توضیح دهید کدام دستور جایگزین شرط باالست. using System; namespace MinAndMax { class Program { static void Main(string[ ] args) { int[] arr; arr = new int[10]; for (int i = 0; i <=9; i++) { Console.Write( enter the {0}th number:, i+1); arr[i] = int.parse(console.readline( )); } int min = arr[0]; for (int i = 1; i <= 9; i++) min = Math.Min(min, arr[i]);
} } Console.WriteLine( minimum is {0}, min); Console.ReadKey( ); } برنامه 3 4 محاسبه کوچک ترین عدد دهیم سؤال: اگر بخواهیم بیشترین عدد را هم در این برنامه نمایش دهیم چه تغییراتی باید انجام ۲ ٤ کالس string همان طور که در برنامه می توان متغیری برای نگهداری داده های عددی تعریف کرد برای داده های رشته ای نیز می توان متغیری از نوع string تعریف کرد. این نوع داده در واقع یک کالس است و متغیری که از این نوع تعریف می شود اشاره به ردیفی از کاراکترها می کند. مثال ۳ ٤ : برای نگهداری کلمه Mohammad از یک متغیر رشته ای به صورت زیر استفاده می کنیم: string name = "Mohammad" ; شکل 4 ٤ ساختمان یک رشته 105
برای آنکه به حروف یک رشته دسترسی داشته باشیم می توانیم مانند آرایه ها از اندیس حروف استفاده کنیم. ]شماره کاراکتر ] نام رشته متنی توجه داشته باشید اندیس از صفر شروع می شود. بنابراین name[5] کاراکتر ششم رشته name را در خود جای داده است. نکته تغییر ناپذیری یک رشته: پس از اینکه یک رشته در حافظه ایجاد شد محتویات آن قابل تغییر نیست. به عبارت دیگر یک رشته پس از ایجاد تغییر ناپذیر 1 است. شاید از خود بپرسید چرا می توانیم به یک رشته مقداری دیگر دهیم پاسخ این است که هر بار که متغیر رشته ای مقدار دیگری می گیرد مانند این است که دوباره تعریف شده است! اما ما نمی توانیم مثال یک حرف از آن را تغییر دهیم. اگر متغیری را از نوع string تعریف نماییم این متغیر دارای متدهایی خواهد بود که می توانند عملیات سودمندی را انجام دهند. مثال متدی به نام () ToLower قادر است حروف انگلیسی موجود در رشته را به حروف کوچک تبدیل کند و در مقابل آن متد ToUpper() می تواند حروف انگلیسی رشته را به حروف بزرگ تبدیل کند. Immutable 1 106
جدول ٢ ٤ برخی متدهای رشته ای از کالس String 1 متد CompareTo () IndexOf )( ToLower () ToUpper () Insert () Length Replace() شرح کار متد مقایسه دو رشته موقعیت وجود یک کاراکتر در رشته را برمیگرداند. تبدیل تمام کاراکترهای یک رشته به حروف کوچک تبدیل تمام کاراکترهای یک رشته به حروف بزرگ درج یک کاراکتر یا یک رشته در درون یک رشته دیگر تعداد کاراکترهای یک رشته را بر میگرداند. یک کاراکتر در یک رشته را با کاراکتر یا یک رشته دیگری عوض میکند. نوع برگشتی bool int string string string int string نکته این متد ها روی خود رشته تأثیر نمی گذارند بلکه یک رشته دیگر بر می گردانند. بنابراین محتوای متغیر رشته ای را تغییر نمی دهند. کار در کارگاه 3 مثال ٤ ٤ : کار با متدهای رشته ای: ١ عملکرد متدهای مختلف کالس string را با تایپ برنامه صفحه بعد مشاهده کنید: 1 متدهای کامل در پیوست 3 ببینید. 107
using System; class Program { static void Main(string[] args) { string s = " This is a String! "; Console.WriteLine ("the main string : \"{0}\"", s); Console.WriteLine (" ToLower: \"{0}\"", s.tolower()); Console.WriteLine (" ToUpper: \"{0}\"", s.toupper()); Console.WriteLine (" Insert: \"{0}\"", s.insert(0, "Note," ) ); Console.WriteLine (" Length: {0}", s.length); Console.WriteLine (" index of 'i': {0}", s.indexof('i')); Console.WriteLine (" Remove:\"{0}\"", s.replace("this is", "we have" ) ); Console.ReadKey( ); } } برنامه 4 ٤ آزمایش متدهای کالس String کار در کارگاه 4 مثال ٥ ٤ : برنامه ای بنویسید که یک نام کاربری و گذرواژه را بگیرد. اگر نام کاربری user و گذرواژه "pass" وارد شود پیام ورود موفقیت آمیز داده شود. همان طوری که در پست الکترونیکی و برنامه های مختلف دیده اید نام کاربری به کوچک یا بزرگی حروف حساس نیست ولی گذرواژه باید دقیقا مطابقت داشته باشد. الگوریتم و روش انجام کار: در این برنامه پس از دریافت نام کاربری و گذرواژه باید بررسی شود که برابر با مقدار خواسته شده می باشد یا خیر. برای آنکه بررسی نام کاربری حساس به نوع حروف نباشد نامی که کاربر وارد می کند را به رشته ای با حروف کوچک تبدیل می نماییم.چرا 108
using System; class Program { static void Main(string[] args) { Console.Write("enter username: " ); string username = Console.ReadLine(); Console.Write("enter password: " ); string password = Console.ReadLine(); if (username.tolower() == "user" && password == "pass" ) Console.WriteLine("your login was successful. Welcome!" ); else Console.WriteLine("username or password is wrong" ); Console.ReadKey(); } } برنامه 5 ٤ بررسی نام کاربری حساس به کوچکی و بزرگی حروف می کند سؤال: اگر بخواهیم از ToUpper به جای ToLower استفاده کنیم کد چه تغییری سؤال: این برنامه را طوری تغییر دهید که تا وارد نشدن نام و گذرواژه صحیح با دادن پیام مناسب عمل دریافت تکرار شود. ٣ ٤ کالس Array در فصل ٢ با مبحث آرایه و کاربردهای آن آشنا شدید. برخی از برنامههایی که با استفاده از آرایهها نوشتیم دارای کدهای طوالنی و وقتگیری است که با کالس Array و متدهای آن قابل جایگزینی است. از ویژگی های این کالس وجود متدهای مختلف استاتیک برای عملیات بر روی آرایهها است. این متده ا کامال آزمایش شده و مطمئن هستند. برای مثال عمل جستجوی خطی دودویی و مرتب سازی آرایه با استفاده از متدهای کالس Array به راحتی قابل انجام است. در جدول ٣ ٤ لیست این متدها و توضیحات آنها را میبینید. 109
جدول ٣ 4 برخی متدهای کالس Array نام متد Sort Reverse IndexOf LastIndexOf BinarySearch Copy Clear کاربرد مرتب سازی لیست شکل کلی )نام آرایه( Array.Sort مثال Array.Sort (names( وارونه کردن عناصر آرایه )نام آرایه( Array.Reverse Array.Sort (names( جستجوی یک مقدار در Array.IndexOf آرایه و برگرداندن مکان اولین مورد پیدا شده )نام آرایه مقدار( Array.IndexOf(names, ali ) جستجوی یک مقدار در Array.LastIndexOf آرایه و برگرداندن مکان آخرین مورد پیدا شده )نام آرایه مقدار( Array.LastIndexOf(names, ali ) Array.BinarySearch جستجوی یک مقدار در آرایه مرتب شده صعودی و برگرداندن مکان اولین مورد پیدا شده کپی کردن عناصر یک آرایه در آرایه دیگر از اولین عنصر تا تعداد تعیین شده )نام آرایه مقدار( Array.Copy )تعداد نام آرایه مبدأ عناصر نام آرایه مقصد ) Array.BinarySearch(names, name)); Array.BinarySearch(names, family,10); پاک کردن و تنظیم مقدار عناصر تعیین شده آرایه یا مقدار پیش فرض نوع داده آرایه Array.Clear )تعداد عناصر شروع اندیس نام آرایه( Array.BinarySearch(names, 4,10); کار در کارگاه 5 مثال 6 4 : برنامه ای بنویسید که اسامی دانش آموزان یک کالس را دریافت کرده و سپس آنها را براساس نام مرتب کرده و نمایش دهد. الگوریتم یا روش انجام کار: ابتدا تعداد دانش آموزان از کاربر دریافت و به همان میزان آرایه ای ایجاد و اسامی از کاربر دریافت می شود. در مرحله بعد اسامی وارد شده مرتب و در نهایت 110
اسامی چاپ میشود. using System; class Program { static void Main(string[] args) { Console.Write("enter number of students:" ); byte count = byte.parse(console.readline()); string[] studentname = new string[count]; for (int i = 0; i < count; i++) { Console.Write("Student Name {0}:", i + 1); studentname[i] = Console.ReadLine(); } Array.Sort(studentName); Console.WriteLine("students in name order:" ); for (int i = 0; i < count; i++) Console.WriteLine("{0,3} ==> {1,-25}", i + 1, studentname[i]); Console.ReadKey(); } } برنامه 6 ٤ مرتب سازی اسامی با استفاده از متد Sort ٢ آرایه را پس از مرتب شدن برعکس نمایید. ٣ در انتهای برنامه و قبل از دستور Console.ReadKey() قطعه برنامه زیر را که نتیجه جستجوی دودویی و خطی یک نام در آرایه است را اضافه کنید. 111 Console.Write(" \n enter a name for search in students:" ); string name = Console.ReadLine ( ); Console.WriteLine("Binary Search Result: " + Array.Binary Search (studentname, name) ); Console.WriteLine("linear search Result: " + Array.Index Of (student Name, name) ); شکل 5 ٤
٤ در اجرای برنامه یکی از اسامی موجود در لیست دانش آموزان را برای جستجو وارد کنید. نتایج را مشاهده کنید. نتیجه جستجوی دودویی 1- خواهد بود. این پاسخ به معنای یافت نشدن نام مورد نظر است. چرا نتیجه چنین است 112
خودآزمایی فصل چهارم ١ هر متد از سمت راست را با توضیح سمت چپ مطابقت دهید )یک توضیح اضافی است(. 1 گرد کردن عدد Math.Sqrt الف( 2 مرتب کردن آرایه Math.Pow ب( 3 وارون نمودن آرایه Math.Round ج( 4 توان رساندن عدد Array.BinarySearch د( 5 جستجوی خطی کلید Array.Sort و( 6 محاسبه جذر عدد 7 جستجوی دودویی در یک آرایه مرتب Array.Reverse ه( ٢ با متدهایی که تاکنون شناخته اید جدول زیر را تکمیل کنید. کالس array کالس string کالس math 113 ٣ راجع به کاربرد متدهایی که در جدول باال نوشته اید با هم کالس خود بحث کنید. ٤ خروجی برنامه زیر چیست using System; class Convert { static void Main(string[ ] args) { int a, b; double d = 0.75; a = (int) Math. Round (d); b = (int)d; Console. WriteLine (a); Console. WriteLine (b); } }
٥ حاصل عبارت زیر چیست Math.Truncate(Math.Round (Math.Pow(2,3)/5) +2.8) ٦ خروجی دستورات زیر چیست static void Main(string[ ] args) { int [ ] numbers = { 7, 42, 16, 8, 16, 14 }; Array.Reverse(numbers); Array.Sort(numbers); for (int i = 0; i < 6; i++) Console.WriteLine(numbers[i]); Console.ReadKey(); } ٧ در سؤال قبل اگر به جای دستور for دستور زیر را می نوشتیم چه چیزی نمایش داده می شد Array.IndexOf (numbers, 16); ٨ دستورات زیر چه کاری انجام می دهند static void Main(string[] args) { string exp = "i am a good student"; for (int i = 0; i < strings.length; i++) Console.WriteLine(strings[i]); Console.ReadKey( ); } 114
تمرینات برنامه نویسی فصل چهارم ١ می خواهیم 20 نفر از دانش آموزان را برای نشستن در کارگاه رایانه به گروه های دو نفری تقسیم کنیم. برنامه ای بنویسید که نام این 20 نفر را دریافت کند و با مرتب کردن نام آنها هر دو نفر را برای گروه های شماره بندی شده از 1 تا 10 نمایش دهد. ٢ برنامه ای بنویسید که یک رشته متنی را دریافت کند. کلمات آن را برعکس نمایش دهد. به عنوان مثال اگر رشته متنی student" I" am a good را به برنامه بدهیم متن "I "student good a am را نمایش دهد. ٣ می خواهیم در کالس خود یک فعالیت پژوهشی با حضور 10 دانش آموز اول لیست کالسی انجام دهیم. برنامه ای بنویسید که اسامی 30 دانش آموز را دریافت کرده و اسامی 10 نفر اول دفتر کالسی )می دانید که اسامی دانش آموزان در دفتر کالسی بر اساس حروف الفبا مرتب شده است( را که در دفتر کالسی پژوهش )آرایه جدید( نیز وارد می کند نمایش دهد. 115
فعالیت متن زیر از MSDN با موضوع آرایه برداشت شده است. آن را با کمک هم کالسی خود ترجمه کنید و به کالس ارائه نمایید. Initializing Arrays C# provides simple and straightforward ways to initialize arrays at declaration time by enclosing the initial values in curly braces ({}). The following example shows the way to initialize an array. Note If you do not initialize an array at the time of declaration, the array members are automatically initialized to the default initial value for the array type. Also, if you declare the array as a field of a type, it will be set to the default value null when you instantiate the type. int[] numbers = new int[5] {1, 2, 3, 4, 5}; string[] names = new string[3] {" Matt", "Joanne", "Robert"}; 116
واژگان و اصطالحات انگلیسی فصل چهارم ردیف واژه انگلیسی معنی به فارسی ١ Area ٢ Array ٣ Immutable 4 Upper ٥ Lower ٦ Radius 117
فصل پنجم ایجاد برنامه های ویندوزی با استفاده از ویژوال استودیو خروجی تمام برنامه هایی که در کتاب برنامه سازی یک و همچنین فصل های قبلی در این کتاب نوشتید در محیط کنسول قابل مشاهده بود. در این فصل می خواهیم با روش برنامه نویسی در محیط ویندوز آشنا شویم تا بتوانیم برنامه هایی با ظاهری زیباتر مانند برنامه های کاربردی رایج در ویندوز بنویسیم. برای محقق شدن این هدف در دو فصل آینده برنامه های خود را در محیط ویندوزی خواهیم نوشت. پس از پایان این فصل انتظار می رود که فراگیر بتواند: ١ تفاوت بین برنامه های کنسولی و ویندوزی را توضیح دهد. 2 واسط گرافیکی کاربر و کاربرد کالس From را توضیح دهد. 3 گزینه های مورد نیاز پنجره ها منو ها و نوار ابزارهای IDE را در محیط ویندوزی مورد استفاده قرار دهد. 4 پروژه ویندوزی با یک فرم ایجاد نماید و ویژگی های مورد نیاز را تنظیم نماید. 5 کنترل های برچسب و جعبه تصویر را به فرم خود اضافه کند و برخی ویژگی های آنها را به دلخواه تغییر دهد. 6 با استفاده از VSبرنامه ویندوزی را ترجمه و اجرا نماید. 118
١ ٥ تفاوت برنامه های کنسولی و برنامه های ویندوزی برنامه های کنسولی که تاکنون نوشته اید برای یادگیری مفاهیم اساسی و مقدماتی زبان برنامه نویسی #C و به دست آوردن تجربه کدنویسی خوب است اما برای تولید برنامه های کاربردی که در زندگی روزمره کاربرد داشته باشد چندان مناسب نیست. امروزه بیشتر کاربران کامپیوتر با برنامه های کاربردی رایج کار کرده اند و توقع دارند برنامه ای که شما می نویسید دارای ظاهر و عملکردی شبیه برنامه های رایج در ویندوز باشند. در اجرای برنامه هایی که از این به بعد می نویسید انتظار می رود که با اجرای آن یک پنجره باز شود و در داخل آن منوها و ابزارهای مختلفی دیده شود که با کلیک کردن روی هر منو یا روی گزینه ای از یک منو پنجره دیگری ظاهر شود. در این پنجره ها اطالعاتی از کاربر در قالب یک فرم دریافت می شود و یا اطالعاتی نشان داده می شود. در هر فرم قسمت هایی برای ورود اطالعات و کلیدهایی برای تأیید و ثبت اطالعات و یا لغو کردن عملیات وجود دارد. به عنوان نمونه در شکل زیر نمونه ای از برنامه حدس عدد را که در کتاب برنامه سازی ١ در محیط کنسول ساخته بودید در محیط ویندوز مشاهده می کنید. این برنامه را در ادامه می سازید. شکل 1 5 یک فرم و برنامه کاربردی در برنامه های کنسولی اجرای برنامه از متدی به نام Main() شروع می شود و دستورات داخل آن به ترتیب و خط به خط اجرا می شوند. در چنین برنامه هایی با استفاده از متدهای موجود مانند ReadLine() برای دریافت یک رشته درخواست هایی به سیستم عامل داده می شود که عملیاتی را برای ما انجام دهد. سخت افزار فرمان سیستم عامل درخواست انجام یک عمل برنامه تحت کنسول 119 شکل ٢ ٥
در برنامه های ویندوزی نیز اجرای برنامه با متدی به نام Main() شروع می شود اما 2 برخالف برنامههای کنسول برنامه در حالت انتظار 1 قرار میگیرد تا یک اتفاق یا رویداد 3 رخ دهد که در این صورت نسبت به آن واکنش نشان دهد. مثال وقتی کاربر با ماوس بر روی دکمه در شکل 1 5 کلیک میکند سیستم عامل که مدیر وکنترل کننده منابع سیستم است متوجه میشود و این اتفاق را به عنوان یک رویداد به برنامه اطالع میدهد. رویداد چیست رویداد یک اطالع 4 است که از طرف سیستم عامل به برنامه داده میشود تا نشان دهد که یک اتفاق رخ داده است. برنامههای ویندوزی باید به رویدادهایی که برای آنها مهم است عکس العمل نشان دهند. User Action عمل کاربر برنامه تحت ویندوز سیستم عامل Message پیام شکل 3 ٥ برای مقایسه بهتر برنامههای کنسولی و برنامههای ویندوزی مثال زیر را در نظر بگیرید: فرض کنید شما در منزل هستید و قرار است برای شما مهمان بیاید. اگر بخواهید به موقع درب منزل را برای وی باز کنید میتوانید به یکی از روشهای زیر عمل کنید: ١ هر چند لحظه یک بار به سمت در منزل بروید و بیرون در را نگاه کنید که آیا مهمان شما آمده است. ٢ میتوانید کارهای دیگر خود را رها کنید و در جلوی در منزل خود منتظر شوید تا وی بیاید. ٣ میتوانید در داخل منزل مشغول انجام کارهای خود باشید هر وقت که مهمان آمد زنگ زد و شما را از ورودش مطلع کرد به استقبال وی بروید و در را برایش باز کنید. شکل ٤ ٥ Wait state 1 Event 2 Button 3 Notification 4 120
در برنامه های کنسولی در دستوراتی مانند دستور دریافت داده اجرای برنامه متوقف می شود و تا زمانی که کلید Enter زده شود دستورات بعدی اجرا نمی شوند. پس از اینکه کاربر اطالعات را وارد کرد و کلید Enter را زد خطوط بعدی برنامه به ترتیب اجرا می شوند. در مقایسه با مثال باال می توان گفت در برنامه های کنسولی از روشی مانند روش 1 و یا روش 2 استفاده می شود. به نظر شما در برنامه های ویندوزی از کدام روش استفاده می شود اما در محیط ویندوز هنگامی که کاربر عملی 1 را انجام می دهد مثال کلیدی از صفحه کلید را فشار می دهد و یا با استفاده از ماوس بر روی منویی و یا کلیدی کلیک می کند از طرف سیستم عامل به برنامه اطالع داده می شود که یک رویداد رخ داده است. در واقع برنامه های ویندوز با دریافت پیام 2 هایی از سیستم عامل از رخ دادن رویداد مطلع می شوند. بنابراین در برنامه های ویندوزی شما به عنوان برنامه نویس باید پیش بینی کنید که اگر کاربر عملی را انجام دهد برنامه چگونه نسبت به آن واکنش نشان دهد و برای این منظور باید متدهایی را بنویسید که در مواجهه با یک رخداد یا رویداد مانند کلیک ماوس در یک محل به کامپیوتر اعالم کند که چه کاری باید انجام شود. به این متدها Event Handler گفته می شود که برای سادگی در این کتاب به جای آن به اختصار EH را به کار می بریم. )کلیک کردن ماوس( Action سیستم عامل Message برنامه تحت اجرای Event Handler دستورات مربوط به واکنش در مقابل کلیک ماوس شکل ٥ ٥ به این ترتیب هنگامی که کاربر بر روی کلیدی با ماوس کلیک می کند این رویداد از طریق سیستم عامل شناسایی می شود و از طرف سیستم عامل یک پیام به برنامه فرستاده می شود و متد EH مربوط به آن رویداد که قبال نوشته ایم به طور خودکار اجرا می شود. طبیعی است که اگر برنامه فاقد 121 Action 1 Message 2
متدی برای یک رویداد باشد هر چقدر که سیستم عامل پیام بفرستد برنامه در مقابل آن واکنشی نشان نخواهد داد. شکل کلی یک متد EH به صورت زیر است: )جزئیات رویداد فرستنده پیام( نام متد void } دستورات واکنش به رویداد { شکل ٦ ٥ هر متد EH دارای دو پارامتر ورودی است که اولی نوع شئ 1 فرستنده پیام را مشخص می کند و پارامتر دوم مربوط به جزئیات رویداد است مثال در مورد کلیک ماوس شامل اطالعاتی در مورد موقعیت مکانی ماوس در لحظه کلیک و کلیدی )کلید چپ راست یا وسط( از ماوس است که فشار داده شده است. هنگامی که یک برنامه ویندوزی مانند برنامه ماشین حساب را اجرا می کنید این برنامه پس از نمایش پنجره خود در حالت انتظار قرار می گیرد تا شما مثال بر روی دکمه ای کلیک کنید و یا از طریق صفحه کلید عالمت یا رقمی را وارد کنید که در این صورت یک رویداد رخ می دهد و EH مربوطه اجرا می شود. یک تفاوت دیگر بین برنامه ویندوزی و کنسولی این است که برنامه های ویندوزی پس از واکنش به رویدادها و انجام عملیات مربوطه مجددا در حالت انتظار برای رویداد بعدی به سر می برند تا در نهایت کاربر از برنامه خارج گردد. در ضمن با توجه به اینکه رویدادهای مختلفی ممکن است از طریق کاربر رخ دهد که قابل پیش بینی نیست بنابراین با اجرای برنامه مشخص نیست که کدام رویداد ممکن است ابتدا رخ دهد و به عبارت دیگر ترتیبی برای رویدادها قابل پیش بینی نیست. ۲ ۵ واسط گرافیکی کاربر در طول دوره های مختلف تحصیلی ممکن است یک روزنامه دیواری با دوستان خود درست کرده باشید. برای ایجاد روزنامه دیواری ابتدا به یک مقوا نیاز دارید تا مطالب خود را بر روی آن Object 1 122
بنویسید و یا عکس ها و بریده های مجالت را بر روی آن بچسبانید. در ساخت یک برنامه ویندوزی نیز باید صفحه یا فرمی در اختیار داشته باشید تا انواع دکمه ها منوها تصاویر و نوشته ها را روی آن قرار دهید. این فرم واسط گرافیکی کاربر یا 1 GUI نامیده می شود. فرم صفحه ای است که اجزای گرافیکی گوناگونی بر روی آن قرار می گیرد. اندازه یک فرم متناسب با تعداد و اندازه اشیای گرافیکی است که قرار است روی آن جای گیرند )شکل ٧ 5 (. شکل ٧ ٥ یک فرم خالی مانند یک مقوای روزنامه دیواری همان طور که برای خرید مقوای روزنامه دیواری الزم است به یک فروشگاه لوازم التحریر مراجعه کنید در زبان برنامه نویسی #C نیز برای ایجاد یک فرم باید به کتابخانه ارزشمند.Net مراجعه کنید. در این کتابخانه کالسی به نام Form تعریف شده است که برای ایجاد یک فرم الزم است از آن به عنوان پایه و مبنای کار خود استفاده کنیم. ٣ ٥ ایجاد یک پروژه ویندوزی با کمک VS برای ایجاد یک برنامه ویندوزی VS را اجرا کنید و در صفحه آغازین روی گزینه New Project کلیک کنید در پنجره ای که مطابق شکل ٨ ٥ نمایان می شود گزینه #C Visual و سپس Windows Forms Application را انتخاب کنید. 123 Graphical User Interface 1
شکل ٨ ٥ پنجره ایجاد پروژه جدید می توانید نام و مسیر ذخیره سازی پروژه را مانند برنامه های کنسولی انتخاب کنید. پس از تأیید و کلیک بر روی دکمه OK وارد محیط IDE )شکل ٩ ٥( می شوید. شکل ٩ ٥ پنجره IDE پروژه ویندوزی 124
همان طور که در شکل ٩ ٥ مشاهده می شود خیلی با این محیط غریبه نیستیم و شبیه محیط تولید برنامه کنسولی است. در اینجا گذری بر روی پنجره های مختلف آن خواهیم داشت. 1 3 5 آشنایی با پنجره های IDE در باالی صفحه منوها و نوار ابزارها 1 مانند محیط تولید برنامه های کنسولی وجود دارد. البته همان طور که در شکل ١٠ ٥ دیده می شود یک منو به نام Format اضافه شده است که از گزینه های آن برای شکل دهی ظاهری و تنظیم جای دهی کنترل های یک فرم استفاده می شود. شکل ١٠ 5 نوار منوها و نوار ابزارهای IDE در یک پروژه ویندوزی در سمت چپ صفحه )IDE( پنجره ای به نام جعبه ابزار 2 دیده می شود. در پنجره جعبه ابزار نام و آیکن کنترل های قابل استفاده لیست شده است. کنترل ها در جعبه ابزار دسته بندی شده اند و هنگامی که بر روی نام یک گروه کلیک می کنید کنترل های مربوطه نمایش داده می شوند و اگر مجددا روی نام آن گروه کلیک کنید لیست مربوطه بسته می شود. در شکل ١١ ٥ جعبه ابزار به صورت گروه بندی نشان داده شده است. شکل ١١ ٥ پنجره جعبه ابزار Tool bar 1 Tool box 2 125
در وسط صفحه یک فرم دیده می شود که از آن برای طراحی واسط کاربری و قراردادن کنترل ها مانند مقوای روزنامه دیواری استفاده خواهیم کرد. اندازه طول و عرض فرم به راحتی با استفاده از ماوس و با کشیدن گوشه های آن که در شکل ١٢ ٥ مشخص شده است قابل تغییر 1 است. با این پنجره که پنجره طراحی فرم نامیده می شود زیاد کار داریم. شکل ١2 ٥ پنجره طراحی فرم با توجه به اینکه محیط VS قابل تنظیم است ممکن است صفحه ای که روی کامپیوتر شما دیده می شود با آنچه که در شکل ٩ ٥ مشاهده می کنید کمی متفاوت باشد. مثال در شکل ١٣ ٥ پنجره هایی در حالت Auto Hide قرار دارند و با کلیک بر روی نام آنها پنجره دیده می شود و با کلیک در نقطه دیگری از صفحه پنجره ها به طور خودکار کنار می روند و فقط نام پنجره ها دیده می شوند. شکل ١٣ ٥ حالت Auto Hide پنجره ها Form Designer 1 126
از قابلیت Auto Hide برای کنار رفتن موقتی پنجره ها و برای بزرگ شدن محیط کار استفاده می شود. برای اینکه پنجره ای را از حالت Auto Hide خارج کنید و یا این قابلیت را به آن بدهید کافی است در روی خط عنوان پنجره بر روی آیکن پونز 1 کلیک کنید. شکل ١٤ ٥ را مشاهده کنید. شکل ١٤ ٥ قابلیت کنار رفتن پنجره به طور خودکار فعال است. اگر پونز در حالت افقی مانند شکل ١٤ ٥ باشد قابلیت Auto Hide فعال است و اگر روی آن کلیک کنید پونز به حالت عمودی قرار می گیرد و پنجره ثابت می ماند. شکل ١٥ ٥ را مشاهده کنید. شکل ١٥ ٥ حالت کنار رفتن خودکار پنجره غیر فعال است. در کنار آیکن پونز آیکن مثلثی شکلی مانند شکل ١٦ ٥ نیز قرار دارد که با کلیک بر آن منوی Windows Posit ion باز می شود تا روش های دیگری برای قرارگیری پنجره فراهم کند. در قسمت کار در کارگاه آنها را تجربه خواهید کرد. 127 شکل ١٦ ٥ نحوه قرار گیری و نمایش پنجره Pushpin 1
به پنجره Solution Explorer مطابق شکل ١٧ ٥ دقت کنید در این پنجره نسبت به آنچه که در برنامه کنسولی مشاهده کردید موارد بیشتری دیده میشود. عالوه بر فایل Program.cs که نام آن برای شما آشنا است فایلهای دیگری از جمله دو فایل به نامهای Form1.cs و Form1.Designer.cs دیده میشوند. دستورات یک برنامه ویندوزی در این سه فایل قرار میگیرد. اگر در پنجره Program.cs روی نام فایل Solution Explorer شکل ١٧ ٥ پنجره Solution Explorer در یک پروژه ویندوزی دوبار کلیک کنید پنجره ای باز می شود و محتویات آن را نشان می دهد. در این فایل کالس اصلی برنامه و متد () Mainمطابق شکل ١٨ ٥ قرار دارد. شکل ١٨ ٥ محتوای فایل Program.cs 128
اگر در پنجره Solution Explorer بر روی کلمه Form1.cs کلیک راست کنید منویی مانند شکل ١٩ ٥ ظاهر می گردد که شامل گزینه هایی برای انجام عملیات مختلف بر روی آن فایل است. به این منوها که گزینه های آن مربوط به یک موضوع خاص است منوی موضوعی 1 یا محلی گفته می شود. شکل ١٩ ٥ منوی موضوعی در مورد فایل Form1.cs در منوی ظاهر شده اگر بر روی گزینه View Designer کلیک کنید یا از میان بر 2 آن Shift+F7 استفاده کنید پنجره طراحی فرم را خواهید دید. نکته در هنگام برنامهنویسی در محیط VS سعی کنید از کلیدهای میانبر استفاده کنید تا سرعت شما در انجام عملیات باال رود. مثال هنگامی که در پنجره Solution Expolrer فایل Form 1.cs انتخاب شده است برای مشاهده دستورات آن و یا برای مشاهده پنجره طراحی فرم که بارها مورد استفاده قرار میگیرد از میانبرهای زیر استفاده کنید. مشاهده دستورات فایل فرم 0+ Alt Ctrl + مشاهده پنجره طراحی فرم Shift + F7 129 Context menu 1 Shortcut 2
در منوی موضوعی فایل Form1.cs اگر بر روی گزینه View Code کلیک کنید محتوای فایل Form1.cs را مانند شکل ٢٠ ٥ مشاهده خواهید کرد که قسمتی از تعریف کالس Form1 است. شکل ٢٠ ٥ محتوای دستورات و برنامه فایل Form1.cs به خط عنوان تعریف کالس Form1 توجه کنید کلمه کلیدی partial در خط عنوان کالس نشان میدهد که بخشی از تعریف کالس Form1 در فایل دیگری قرار دارد. قسمت دیگر تعریف کالس Form1 کجا است فایل دیگری که VS ایجاد می کند و شما نباید محتویات آن را دستکاری کنید فایل Form1.Designer.cs است. هنگامی که از جعبه ابزار سمت چپ صفحه کنترلی را انتخاب و آن را در روی فرم قرار می دهید و ویژگی های آن را مطابق سلیقه خود تنظیم می کنید VS تنظیمات شما را به دستورات و کدهای زبان #C تبدیل می کند. این دستورات به عنوان بخشی از تعریف کالس Form1 به وسیله VS در فایل Form1.Designer.cs به طور خودکار نوشته می شود و کار شما را بسیار آسان می کند. بنابراین بقیه تعریف کالس Form1 در این فایل قرار دارد. در پنجره Solution Explorer آن را پیدا کرده و با دو بار کلیک با احتیاط آن را باز می کنیم. همان طور که در شکل ٢١ ٥ مشاهده می کنید ادامه تعریف کالس Form1 دیده می شود. دستورات و محتویات این فایل با 130
قراردادن کنترل ها بر روی فرم افزایش می یابد. برای جلوگیری از دستکاری دستورات این فایل و در دسترس قرار ندادن آنها مترجم آنها را در لحظه اول نمایش نمی دهد. شکل ٢١ ٥ محتوای دستورات و برنامه فایل Form1.Designer.cs برای نمایش دستورات در سمت چپ پنجره ای که محتوای فایل Designer را نشان می دهد یک خط عمودی را مشاهده می کنید که در بین آن عالمت های - و در بعضی قسمت ها عالمت + قرار دارد. اگر بر روی عالمت + کلیک کنید منطقه ای نمایان می شود که تعدادی از دستورات در آن قرار گرفته است. 1 لطفا این دستورات را بدون آگاهی تغییر ندهید که در این صورت قسمت طراحی فرم دچار مشکل می شود. ٢ ٣ ٥ پنجره ویژگی ها و خواص اشیاء پنجره ای که در برنامه های ویندوزی از آن زیاد استفاده خواهیم کرد پنجره Properties است که در شکل ٢٢ ٥ مشاهده می کنید. 1 با استفاده از راهنمای #region و #endregion این امکان مهیا می شود که تعدادی دستور در لحظه اول نشان داده نشوند و در صورت لزوم با کلیک بر روی عالمت + نمایان شوند. Formatted: Font: 11 pt, Complex Script Font: 11pt Formatted: Font: 11 pt, Complex Script Font: 11pt 131
شکل 22 5 پنجره Properties در این پنجره ویژگی ها و خواص شئ و همچنین واکنش به رویدادهای هر شئ را می توانیم مقداردهی و تنظیم کن یم. در قسمت باالی این پنجره نام یک شئ که در فرم انتخاب شده نشان داده شده است و از طریق مثلث کوچک کنار آن می توان شئ دیگری را از بین اشیای موجود روی فرم انتخاب کنیم. در زیر نام شئ می توان با کلیک بر روی آیکنی که نظیر رعد و برق است لیست رویدادهای شئ مشاهده و یا بر روی آیکن کنار آن کلیک کرد تا لیست ویژگی های 1 شئ را مشاهده شود. د ر هر کدام از انتخاب ها لیست نشان داده شده را می توان به ترتیب نام و یا به ترتیب عملکر د که دسته بندی 2 شده است مشاهده نمایید. در ش کل ٢٣ ٥ آیکن های مربوطه دیده می شوند. شکل ٢٣ ٥ آیکن های ترتیب نمایش ویژگی ها در پنجره Properties Alphabetical view 1 Categorized view 2 132
3 3 5 استفاده از جعبه ابزار و قراردادن کنترل ها در روی فرم همان طورکه در فصل قبل بیان شد یک برنامه ساده ویندوزی از یک فرم تشکیل می شود که به عنوان نگهدارنده 1 برای قرار گرفتن اجزای گرافیکی دیگر استفاده می شود. شکل ٢٤ ٥ را مشاهده کنید. شکل ٢٤ ٥ پنجره طراحی و جعبه ابزار در حالی که پنجره طراحی فرم را مشاهده می کنید می توانید از جعبه ابزار استفاده کرده و کنترل مورد نظر خود را پیدا کنید. برای قرار دادن یک کنترل بر روی فرم می توانید روی کنترل مورد نظر دوبار کلیک کنید و یا با درگ کردن کنترل و رها کردن آن روی فرم کنترل مورد نظر را روی فرم بچسبانید. البته بعضی از کنترل ها مانند کنترل زمان سنج )تایمر( 2 با توجه به عملکردشان ممکن است در قسمت پایین فرم قرار گیرند که با آنها در این کتاب آشنا می شوید. اندازه فرم که برای طراحی استفاده می کنید قابل تغییر است. توجه داشته باشید که اگر در پنجره Form Designer در روی فرم دوبار کلیک کنید دستوراتی به فایل Form1.cs اضافه می شود که مربوط به الگوی یک EH است که در شکل ٢٥ ٥ نشان داده شده است به دلیل اینکه به طور اتفاقی و اشتباها دوبار کلیک کرده اید لذا دستورات اضافه شده را حذف کنید و یا با احتیاط عمل انجام شده را لغو و یا بی اثر کنید. 133 Container 1 Timer Control 2
شکل ٢٥ ٥ دستورات اضافه شده در اثر دو بار کلیک بر روی فرم کار در کارگاه 1: جابه جایی پنجره ها در VS ١ برنامه VS را اجرا کنید و یک پروژه Windows Forms Application ایجاد کنید. ٢ پنجره Solution Explorer را در حالت Auto Hide قرار دهید. ٣ پنجره Properties را نیز در حالت Auto Hide مانند شکل ٢٦ ٥ قرار دهید. شکل ٢٦ ٥ حالت کنار رفتن خودکار 134
٤ هر دو پنجره را از حالت Auto Hide خارج کرده و به حالت چسبیده 1 مانند شکل ٢٧ ٥ قرار دهید. شکل ٢٧ ٥ پنجره ها در حالت چسبیده )Dock( ٥ پنجره Tool box را در حالت Auto Hide قرار دهید تا قسمت طراحی فرم مانند شکل ٢٨ ٥ بزرگ تر شود. اگر از قبل در حالت Auto Hide است آن را به حالت چسبیده تغییر دهید. شکل ٢٨ ٥ حالت کنار رفتن خودکار پنجره جعبه ابزار 135 Dock 1
٦ ماوس را روی خط عنوان پنجره Solution Explorer برده و با استفاده از درگ کردن آن را به نقاط دیگر ببرید. توجه کنید که VS مکان هایی را مانند شکل ٢٩ ٥ به شما پیشنهاد می دهد. از آنها استفاده و موقعیت های مختلف را تجربه کنید. سعی کنید که مفهوم موقعیت های پیشنهادی را بفهمید. پنجره در حال درگ موقعیت های پیشنهادی شکل ٢٩ ٥ انتقال پنجره به نقاط دیگر صفحه ٧ برای اینکه هر دو پنجره Solution Explorer و Properties از کل فضای سمت راست صفحه به طور مشترک استفاده نمایند آنها را به صورت Tab Docked مانند شکل ٣٠ ٥ قرار دهید. برای این منظور پنجره Properties را درگ کرده و وقتی روی خط عنوان پنجره Solution Explorer رسید آن را رها کنید. ٨ مجددا هر دو پنجره را به صورت چسبیده مانند شکل ٢٧ ٥ قرار دهید. شکل ٣٠ ٥ پنجره ها در حالت Tab Docked 136
اکنون که با پنجره های محیط طراحی برنامه ویندوزی در VS آشنا شدیم می توانیم یک نمونه پروژه ویندوزی را قدم به قدم دنبال کنیم. 4 5 ساخت یک واسطه کاربری با استفاده از قابلیت طراحی تصویری در VS هنگامی که از امکانات VS برای طراحی واسطه کاربری استفاده می کنید بسیاری از دستورات و کدهای الزم بدون اینکه شما متوجه شوید به طور خودکار به وسیله VS تولید شده و در قالب فایل هایی که در ابتدای این فصل معرفی شد به برنامه اضافه می شوند. در قسمت کار در کارگاه 2 مراحل ساخت یک نمونه فرم ساده را بدون نوشتن حتی یک خط برنامه دنبال می کنیم. بدیهی است برای تولید فرم های کاربردی و واکنش به رویدادها عالوه بر استفاده از ابزارها و امکانات VS باید چند خط برنامه نیز بنویسیم. کار در کارگاه 2: ساخت اولین فرم ساخت یک برنامه یا یک فرم مانند شکل ٣1 5 شکل ٣١ ٥ اولین برنامه در ویژوال #C الگوریتم یا روش انجام کار: برای ایجاد چنین فرمی مراحل زیر را به دقت انجام دهید: ١ ایجاد یک پروژه ویندوزی: وارد برنامه VS شوید و یک پروژه جدید از نوع Windows Forms Application با نام پروژه WindowsApp و در مسیر مشخصی مانند شکل ٣٢ ٥ بسازید. اگر در حال حاضر در داخل VS هستید از طریق منوی File انتخاب گزینه Close Solution پروژه فعلی را ببندید و سپس یک پروژه جدید مطابق با آنچه که گفته شد بسازید. 137
شکل ٣٢ ٥ ایجاد پروژه جدید ٢ تعیین خط عنوان فرم: اگر به خط عنوان فرم در شکل ٣١ ٥ توجه کنید عبارت فارسی «شروع کار«دیده می شود. برای تغییر عنوان فرم به عبارت خواسته شده به پنجره ویژگی ها) Properties ( رفته و مانند شکل ٣٣ ٥ خاصیت Text را پیدا کرده و متن داخل آن یعنی "Form1" را پاک کرده و عبارت جدید «شروع کار«را تایپ کنید. اگر پنجره Properties دیده نمی شود از منوی View بر روی گزینه Properties Window کلیک کنید و یا از میان بر مربوطه استفاده نمایید. 138 شکل ٣٣ ٥ تغییر خاصیت Text مربوط به فرم از طریق پنجره Properties
٣ اضافه کردن یک متن نمایشی بر روی فرم: برای نمایش یک متن یا عبارت بر روی فرم از کنترل برچسب )Label( استفاده می کنیم. به سراغ پنجره جعبه ابزار رفته و کنترل برچسب )Label( را پیدا کرده و آن را بر روی فرم قرار می دهیم. شکل ٣٤ ٥ را مشاهده کنید. شکل ٣٤ ٥ کنترل برچسب در جعبه ابزار با یکی از روش های زیر می توانید کنترل ها را بر روی فرم قرار دهید: ١ با استفاده از دابل کلیک بر روی کنترل ٢ با استفاده از روش Drag & Drop ٤ تعیین ویژگی Text برای برچسب: به پنجره طراحی فرم مراجعه کرده بر روی برچسب یک بار کلیک کنید تا انتخاب شود. با انتخاب کنترل برچسب روی فرم پنجره Properties ویژگی های آن را نشان می دهد. نام این کنترل به طور خودکار به وسیله VS انتخاب می شود که label1 است. در واقع این نام نام شئ است که از کالس Label ایجاد و یا نمونه سازی شده است. در خط 139
اول پنجره Properties نام شئ به همراه نام کالس آن نشان داده شده است. )Label1 System.windows.Forms.Label( حال در پنجره Properties پس از اطمینان از اینکه برچسب انتخاب شده خاصیت Text را مانند شکل ٣٥ ٥ پیدا کنید. شکل ٣٥ ٥ تغییر ویژگی متن کنترل برچسب برای اطمینان از اینکه برچسب انتخاب شده است به قسمت باالی پنجره Properties توجه کنید باید نام برچسب را مشاهده کنید. اگر چنین نیست روی فلش کوچک کنار آن کلیک کنید نام برچسب را پیدا کرده و آن را انتخاب کنید. پس از انتخاب کنترل برچسب عبارت»ساخت اولین فرم با ویژوال #C«را در قسمت Text برچسب وارد کنید. همان طور که در شکل 36 5 مشاهده می شود عبارت مورد نظر در خاصیت Text برچسب وارد شده اما به هم ریخته است. چون عبارت وارد شده ترکیبی از کلمات فارسی و همچنین حروف انگلیسی است لذا مشکل به هم ریختگی کلمات پیش آمده و عبارت»#C«عالوه بر اینکه در جای خود )انتهای جمله( قرار ندارد به شکل برعکس یعنی»C#«دیده می شود. برای رفع این مشکل چه باید کرد 140
شکل 36 5 متن شامل کلمات فارسی و انگلیسی قبال با چنین مشکالتی در برنامه هایی نظیر Word روبه رو شده بودید. در اغلب برنامه های کاربردی از زبان های محاوره ای پشتیبانی می شود که در آنها کلمات و جمالت از سمت راست به چپ نوشته می شود. درNET. نیز چنین است. در کنترل ها خاصیتی به نام RightToLeft برای پشتیبانی از زبان های راست به چپ )RTL( 1 پیش بینی شده است. بنابراین به سراغ خاصیت RightToLeft بروید و مقدار آن را به Yes تغییر دهید. شکل 37 5 را مالحظه کنید. شکل 37 5 ویژگی RightToLeft برای پشتیبانی از زبان های RTL 141 Right to Left Languages 1
با تغییر دادن مقدار ویژگی RightToLeft به مقدار Yes عبارت نوشته شده در برچسب به صورت شکل 38 5 خواهد شد: شکل 38 5 تغییر ویژگی RightToLeft همانطور که در شکل 38 5 مشاهده میکنید تنها اشکال باقیمانده برعکس بودن عبارت "#C" است که برای تصحیح آن به خاصیت Text بروید و آن را به صورت "C#" تایپ کنید. 5 تعیین ویژگی های فونت رنگ و محل قرارگیری برچسب: برای تعیین نوع فونت کنترل برچسب از خاصیت Font در پنجره Properties استفاده کنید و روی عالمت سه نقطه کلیک کنید تا لیست فونتهای موجود در کامپیوتر ظاهر شود. پنجرهای مانند شکل 39 5 مشاهده میشود که در آن میتوانید فونت دلخواه را به همراه اندازه و سبک آن انتخاب کنید. سعی کنید فونتی را انتخاب کنید که نوشتههای فارسی خوب شکل 39 5 پنجره فونت دیده شوند. 142
همچنین برای تعیین رنگ نوشته از خاصیت ForeColor استفاده می کنیم. پس از کلیک بر روی عالمت فلش پنجره ای برای تعیین رنگ باز می شود در آن پنجره مطابق شکل 40 5 بر روی سربرگ Custom کلیک کنید. شکل 40 5 پنجره رنگ حال می خواهیم محل قرارگیری کنترل را تنظیم کنیم. قبل از انجام این کار که به سادگی با استفاده از ماوس می توانید انجام دهید به پنجره Properties مراجعه کنید و ویژگی Location را مطابق شکل 41 5 پیدا کرده روی عالمت + کنار آن کلیک کنید. 143 شکل 41 5 ویژگی موقعیت
در جلوی ویژگی Location دو عدد 0 و 0 نوشته شده است. این اعداد فاصله کنترل را از سمت چپ فرم و از باالی فرم بر حسب پیکسل 1 مشخص میکنند. به عبارت دیگر موقعیت یک کنترل نسبت به گوشه باال سمت چپ 2 فرم سنجیده میشود. بر خالف آنچه که در ریاضیات معمول است که موقعیت یک نقطه را نسبت به مرکز صفحه )مبدأ( در نظر میگیرند در کامپیوتر مبدأ سنجش موقعیت گوشه باال سمت چپ صفحه است. برای تنظیم محل قرارگیری کنترل میتوانید از ماوس استفاده کنید و یا اعداد مناسبی را به عنوان فاصله از چپ و باال مشخص کنید. در اینجا با استفاده از ماوس کنترل برچسب را گرفته و در نقطه دلخواه فرم قرار دهید بهطوری که از دو طرف فرم به یک اندازه باشد. همچنین میتوانید مانند شکل 42 5 از منوی Format گزینه Center in Form استفاده کنید تا با دقت بیشتری کنترل را در وسط فرم شکل 42 5 تنظیم موقعیت افقی با استفاده از منوی Format قرار دهید. نکته هنگامی که بیش از یک کنترل در روی فرم قرار داشته باشد اگر آنها را با هم انتخاب کنید ابزارهای تنظیم موقعیت آنها نسبت به یکدیگر که در روی نوار ابزار و همچنین در منوی Format وجود دارد فعال شده به سادگی و با دقت و سرعت عمل باال می توانید آنها را تنظیم کنید. شکل 43 5 Pixel 1 leftupper corner 2 144
بعد از جا به جایی کنترل برچسب و قرارگرفتن در یک موقعیت مناسب به پنجره Properties رفته و مقدار اعداد در ویژگی Location را مشاهده کنید. همان طور که در شکل 44 5 مشاهده می کنید در اثر جا به جایی کنترل مقدار 0 و 0 به اعداد دیگری مانند 29, 40 تغییر کرده است. ارتباط این دو عدد با محل قرار گیری برچسب نسبت به فرم 1 در شکل 45 5 نشان داده شده است. فاصله افقی نسبت به لبه سمت چپ فرم با مقدار X و فاصله عمودی 2 نسبت به لبه باالی فرم با مقدار Y مشخص می گردد. شکل 44 5 مقادیر ویژگی موقعیت کنترل برچسب شکل 45 5 ارتباط مقادیر ویژگی موقعیت با لبه های فرم 145 Horizontally 1 Vertically 2
قبل از رفتن به مرحله بعدی بهتر است یک بار ویژگی هاو ویژگی های کنترل برچسب را که تنظیم کرده ایم در جدول 1 5 مشاهده کنید. رنگ نوشته و نوع فونت ممکن است با آنچه شما در انجام این مثال انجام می دهید متفاوت باشد که اهمیتی ندارد. جدول 1 5 مقادیر ویژگی ها ی کنترل برچسب کنترل Label مقدار ویژگی Name Text RightToLeft Font ForeColor Location label1 ساخت اولین فرم با ویژوال #C Yes Arial Size :16 Green Bold Center in Form Horizontally در سطر اول جدول 1 5 نام کنترل نوشته شده است و در ستون اول نام ویژگی های کنترل و در ستون دوم مقدار هر ویژگی بیان شده است. با توجه به اینکه جدول 1 5 به طور واضح و گویا ویژگی های کنترل برچسب را نشان می دهد از چنین جداولی در انجام پروژه های بعدی و یا حتی در امتحانات عملی برای مشخص کردن ویژگی های هر کنترل که باید تنظیم شود استفاده خواهیم کرد و دیگر الزم به ارائه توضیحات نیست. 6 اضافه کردن عکس بر روی فرم: در این مرحله باید عکسی را به فرم اضافه نماییم. برای نمایش یک عکس می توانید از کنترل PictureBox استفاده کنید که یک کنترل جالب و کاربردی است و آن را کنترل جعبه تصویر می نامیم. برای قراردادن این کنترل بر روی فرم به جعبه ابزار مراجعه کرده آن را پیدا کرده و به فرم اضافه کنید. شکل 46 5 را مشاهده کنید. 146
شکل 46 5 اضافه کردن کنترل جعبه تصویر به فرم به محض قرار گیری این کنترل بر روی فرم پنجره Properties به طور خودکار ویژگی ها این کنترل را نشان می دهد. نام این شئ picturebox1 است که به وسیله VS انتخاب می شود و از کالس PictureBox ساخته شده است. برای تعیین تصویری که می خواهیم در جعبه تصویر نمایش داده شود از ویژگی Image این کنترل استفاده می کنیم. برای مقداردهی ویژگی Image دو روش وجود دارد: 1 استفاده از پنجره Properties انتخاب شئ PictureBox و سپس کلیک روی عالمت... )شکل 47 5 (. 2 کلیک روی مثلث کوچک سیاه رنگ در کادر اطراف کنترل جعبه تصویر و استفاده از گزینه Choose Image در کادر اطراف کنترل جعبه تصویر یک مثلث کوچک سیاه رنگ دیده می شود. با کلیک بر آن منویی مانند شکل 48 5 ظاهر می گردد که در آن چند ویژگی کنترل نشان داده می شود. شکل 47 5 ویژگی Image برای تعیین تصویر 147
شکل 48 5 کلیک بر روی مثلث و ظاهر شدن منو به وسیله گزینه Choose Image در شکل 48 5 نیز عالوه بر پنجره Properties می توانید ویژگی Image را تعیین کنید. در هر حال با انتخاب گزینه Choose Image پنجره ای به نام انتخاب منبع Resource( )Select شکل 49 5 باز می شود که در آن باید فایل مورد نظر برای اضافه شدن به پروژه را مشخص کنید. اگر در شکل 49 5 بر روی کلید Import کلیک کنید پنجره انتخاب فایل باز می شود تا یک کپی از فایل مورد نظر شما به لیست فایل های پروژه اضافه شود. شکل 49 5 انتخاب فایل تصویری جهت اضافه شدن به پروژه پس از اینکه پنجره مربوط به تعیین نام فایل ظاهر شد وارد پوشه Pictures شوید و یک فایل تصویری انتخاب کنید. در این مثال تصویر گل ادریسی انتخاب شده است. 148
شکل 50 5 انتخاب فایل تصویری جهت نمایش در کنترل جعبه تصویر پس از انتخاب فایل مورد نظر به پنجره انتخاب منابع باز می گردید. با کلیک روی دکمه OK عملیات انجام شده را تأیید کنید )شکل 51 5 (. 149 شکل 51 5 پنجره انتخاب منبع پس از انتخاب فایل تصویری
پس از انتخاب فایل تصویری و کلیک بر روی دکمه OK تصویر انتخاب شده در جعبه تصویر قرار می گیرد. اگر مانند این مثال اندازه عکس بزرگ تر از اندازه جعبه تصویر باشد فقط بخشی از آن مانند شکل 52 5 دیده خواهد شد. نگران نباشید این مشکل را برطرف می کنیم! شکل 52 5 اضافه شدن فایل تصویری در فولدر Resources اگر به پنجره Solution Explorer در شکل 52 5 دقت کنید فایل تصویر انتخاب شده در پوشه Resources دیده می شود. اگر از طریق My Computer به مسیری بروید که در ابتدا برای پروژه تعیین کرده اید پوشه ای به نام Resources را پیدا خواهید کرد که در داخل آن یک کپی از فایل تصویر انتخاب شده قرار دارد. به همین دلیل به این پوشه پوشه منابع گفته می شود. برای برطرف کردن مشکل عدم تطبیق اندازه عکس و اندازه جعبه تصویر چه کنیم شاید راه حل های مختلفی برای برطرف کردن ا شکال فوق از جمله کاهش اندازه عکس به وسیله برنامه های گرافیکی نظیر Paint و Photoshop و یا بزرگ کردن اندازه جعبه تصویر به طوری که بتواند تمام عکس را در خود جای دهد به نظر برسد. اما بهترین راه حل این است که از ویژگی StretchImage کنترل جعبه تصویر استفاده کنیم و مقدار آن را مانند شکل 53 5 برابر SizeMode قرار دهیم. 150
شکل 53 5 تغییر خاصیت SizeMode به StretchImage حال برنامه را اجرا می کنیم خروجی آن مانند شکل 54 5 است. شکل 54 5 خروجی اولین برنامه نوشته شده در محیط #C Visual تبریک می گوییم که توانستید اولین برنامه ویندوزی با استفاده از VS را بنویسید. در این مثال یک خط برنامه ننوشتید و همه دستورات این برنامه به وسیله VS به طور خودکار انجام شد. بر روی فایل Form1.Designer.cs دوبار کلیک کنید و مستقیم به سراغ متد InitializeComponent() بروید و روی عالمت + کلیک کنید تا محتوای آن را ببینید. توجه داشته باشید که محتویات این فایل بخصوص این متد را نباید بدون اطمینان و آگاهی تغییر دهید و یا دستکاری کنید. شکل 55 5 را مشاهده کنید. دستورات مربوط به برچسب و جعبه تصویر مشخص شده است. دستورات قسمت پایین در شکل 55 5 مربوط به چیست 151
مقداردهی ویژگی های برچسب مقداردهی ویژگی های جعبه تصویر /// Required method for Designer support. do not modify محتویات این متد رابا ادیتور تغییر ندهید editor. /// the contents of this method with the code /// < /summary> private void InitializeComponent ( ) { this. label 1 = new System.Windows.Forms. label ( ); this. picturebox1 = new System.Windows.Forms. picturebox ( ); ( ( System. ComponentMode 1. IsupportInitialize) (this. picturebox1) ). BeginInit ( ); this. SuspendLayout ( ); / / label 1 / / this. label1. AutoSize = true; this. label1. Font = new System.Drawing. Font ("Arial", 15.75F, System. Drawing. this. label1. ForeColor = System.Drawing. Color. Green; this. label1. Location = new System.Drawing. Point (12,13); this. label1. Name = "label 1"; this. label1. RightTOLeft = System.Windows. Forms. RightTOLeft.Yes; this. label1. Size = new System.Drawing.Size (227, 24); this. label1. TabIndex = 0; this. label1. Text = " ساخت اولین فرم با ویژوال #C"; // // picturbox1 // this. picturebox1. Imag = global: :WindowsApp. Properties. Resources. Hydrangeas this. picturebox1. Location = new System. Drawing. Point (12, 57); this. picturebox1. Name = "picturebox1"; this. picturebox1. Size = new System. Drawing. Size (233, 193); this. picturebox1. SizeMode = System. Windows. Forms. PictureBoxSizeMode.Stretcr this. picturebox1. TabIndex = 1; this. picturebox1. TabStop = false; // // Form1 // 152
this. AutoScaleDimensions = new System. Drawing. SizeF (6F, 13F); this. AutoScaleMode = System.Windows. Forms. AtoScaleMode.Font; this. ClientSize = new System. Drawing. Size (284, 262); this. Controls. Add (this.picturebox1); this. Controls. Add (this.label1); this. Name = "Form1" ; ; «شروع کار» = Text this. ( (System. ComponentMode 1. IsupportInitialize) (this.picturebox1) ). EndInit ( ); this. ResumeLayout (false); this. PerformLayout ( ); شکل 55 5 محتویات متد InitalizeComponent() در فایل Form1.Designer.cs برای مطالعه کنترل ها و ابزارهای شخص ثالث برایNET. عالوه بر کنترل هایی که در جعبه ابزار VS وجود دارد کنترل های دیگر و ابزارهای پیشرفته ای نیز توسط شرکت های نرم افزاری که با شرکت مایکروسافت همکاری دارند ساخته شده اند. به این نوع کنترل ها که قابلیت اضافه شدن به فرم های ویندوزی را دارند و توسط شرکت دیگری ساخته می شود کنترل های شخص ثالث نامیده می شوند. بعضی از این ابزارها و کنترل ها در محیط ویژوال استودیو اضافه می شوند. شرکت DevExpress از جمله شرکت هایی است که مجموعه کنترل ها و ابزارهای واسطه کاربری را برای تولیدکنندگان برنامه های کاربردی از جمله برنامه نویسانی که از و یژوال استودیو استفاده می کنند فراهم و به صورت تجاری عرضه کرده است. با استفاده از این کنترل ها واسطه های کاربری زیباتری بدون کدنویسی می توان ایجاد کرد. یکی از ابزارهایی که این شرکت به رایگان عرضه می نماید CodeRush Express است 153
که می توانید آن را از آدرس زیر دانلود نمایید. با نصب این ابزار در محیط VS امکانات بیشتری در هنگام برنامه نویسی فراهم می شود. مثال منوی Refactoring با گزینه های متنوعی را در اختیار خواهید داشت. https://www.devexpress.com/products/coderush/ کار در کارگاه 3: تنظیم اندازه کنترل تنظیم خودکار اندازه کنترل ها در هنگام اجرای برنامه 1 پروژه WindowsApp که در این فصل ساختید را اجرا کنید. شکل 56 5 تغییر اندازه پنجره برنامه در حال اجرا 2 همان طورکه در شکل 56 5 مشاهده می کنید با استفاده از ماوس گوشه سمت راست پایین پنجره برنامه را گرفته و به سمت راست بکشید تا پنجره برنامه بزرگ تر شود. شکل 57 5 154
همانطور که در شکل 57 5 مشاهده میکنید در اثر تغییر اندازه پنجره فضای خالی در سمت راست ایجاد میشود. اما کاربران انتظار دارند با بزرگ شدن پنجره اندازه تصویر نیز افزایش یابد و صفحه پر شود. ولی در برنامه باال چنین نیست و توازن صفحه به هم میخورد. برای رفع اشکال باال دو راه حل داریم: الف( کاربر اجازه تغییر اندازه پنجره برنامه را نداشته باشد. در واقع صورت مسئله را پاک میکنیم و به کاربر اجازه نمیدهیم که اندازه فرم را تغییر دهد تا چنین مشکلی به وجود آید. فرمها دارای ویژگی به نام FormBorderStyle هستند که به وسیله آن میتوانیم سبک یا شکل ظاهری کادر دور فرم را تعیین کنیم. در بعضی از سبکها از امکان تغییر اندازه پنجره در حین اجرای برنامه جلوگیری میشود. مقدار پیش فرض این ویژگی Sizable است یعنی فرم قابل تغییر اندازه است. برای انتخاب سبکهای دیگر در حالی که فرم انتخاب شده است در پنجره Properties به سراغ ویژگی FormBorderStyle رفته )شکل 58 5 ( و مقدار دیگری مانند FixedSingle که به معنای اندازه ثابت فرم و با کادر تک خطی میباشد را شکل 58 5 ویژگی FormBorderStyle فرم انتخاب کنید. نکته میتوانید منوی کنترل پنجره و آیکنهای بیشینه کمینه و خروج را پنهان کنید. برای این منظور ویژگی ControlBox مربوط به فرم را برابر false کنید. البته در این صورت کاربر مجبور است برای پایان دادن به اجرای برنامه از ترکیب کلیدی Alt F4+ استفاده کند. ب( در روش دوم محدودیتی برای کاربر ایجاد نکرده و مانع تغییر اندازه فرم نمی شویم. بنابراین باید اندازه جعبه تصویر در هنگام تغییر اندازه پنجره به طور خودکار افزایش یابد. و به عبارت جالب تر باید فاصله جعبه تصویر از چهار لبه فرم همواره ثابت بماند. خیلی نگران نباشید در VS برای انجام این 155
کار نیازی به برنامه نویسی خود شما نیست و فقط کافی است در محیط طراحی از ویژگی Anchor کنترل جعبه تصویر برای این منظور استفاده کنید. این ویژگی ها می تواند مقادیر, Top Left, Right, Bottom و یا ترکیبی از آنها را بپذیرد. هر یک از مقادیر باعث می شوند که فاصله کنترل از سمت مربوطه ثابت بماند. در حالت پیش فرض مقدار ویژگی Anchor کنترل جعبه تصویر برابر Left, Top است بنابراین فاصله کنترل از دو طرف چپ و باالی فرم ثابت باقی می ماند. شکل 59 5 را مشاهده کنید. شکل 59 5 ویژگی Anchor اگر در ویژگی Anchor مربوط به جعبه تصویر هر چهار مقدار را قرار دهید )از ماوس کمک بگیرید و روی دو کادر خط چین راست و پایین در شکل 59 5 کلیک کنید تا رنگ آنها خاکستری شود( فاصله آن از چهار طرف ثابت می ماند. به عبارت دیگر اندازه آن هماهنگ با افزایش اندازه پنجره تغییر می کند. شکل 60 5 پنجره برنامه را پس از افزایش توسط کاربر نشان می دهد. 3 در شکل فوق مشاهده می کنید که برچسب در وسط پنجره قرار ندارد. برای اینکه موقعیت برچسب نیز بتواند با تغییر اندازه پنجره تغییر کند و همواره در وسط باقی بماند الزم است فقط فاصله 156 شکل 60 5 تغییر اندازه پنجره برنامه در حال اجرا پس از تنظیم ویژگی Anchor کنترل picturebox
آن تا باالی پنجره ثابت باشد. البته توجه داشته باشید برچسب باید از ابتدا در وسط فرم باشد. بنابراین برچسب را انتخاب کرده و ویژگی Anchor آن را برابر Top قرار دهید تا به طور خودکار موقعیت آن همواره در وسط پنجره قرار گیرد. 4 برنامه را اجرا کنید و اندازه پنجره را تغییر دهید. آیا اندازه تصویر و موقعیت برچسب نیز مطابق با آن به طور خودکار تغییر می کند و کار رضایت بخش است 5 در خیلی از برنامه های کاربردی نظیر Word و Excel که در سال قبل آشنا شدید برای وارد کردن اطالعات به زبان فارسی و یا نمایش صحیح اطالعات فارسی جهت صفحه را به حالت راست به چپ 1 تغییر می دادید. در فرم ها و کنترل هایی که برای نمایش و یا دریافت اطالعات فارسی به کار می روند نیز بهتر است ظاهر و ترتیب قرارگیری اجزای فرم و همچنین ترازبندی از راست به چپ تنظیم شوند. مثال در شکل 61 5 خط عنوان فرم به صورت راست به چپ تنظیم شده است. شکل 61 5 خط عنوان از راست به چپ همان طور که در شکل مشاهده می کنید خط عنوان فرم تغییر کرده است و حالت آینه ای نسبت به فرم های معمولی دارد. در این فرم آیکن های بستن پنجره بیشینه و کمینه در جهت سمت چپ قرار گرفته اند. در فرم های ویندوزی خاصیت RightToLeft و خاصیت RightToLeftLayout برای پشتیبانی از زبان های راست به چپ پیش بینی شده است. برای ایجاد چنین حالتی باید مقدار هر دو خاصیت را به true تغییر دهید. 157 Right to Left 1
158 خودآزمایی فصل پنجم الف( درستی یا نادرستی هر عبارت را تعیین کنید. 1 برنامههای کنسولی کاربرد زیادی در سیستم عامل ویندوز دارند. 2 در برنامههای ویندوزی واسط کاربری به صورت گرافیکی است. 3 برای نمایش یک متن روی فرم از کنترل Label استفاده میکنیم. 4 عنوان یک فرم از طریق ویژگی Text مقداردهی میشود. 5 میتوان منوی کنترل پنجره و آیکنهای بیشینه کمینه و خروج را پنهان کرد. ب( در سؤاالت چند گزینهای زیر پاسخ صحیح را انتخاب نمایید. 6 کدام ویژگی یک برچسب مربوط به متن داخل آن است ب( Text الف( RightToLeft د( TextAlign ج( Enabled 7 برای تغییر ویژگیهای یک کنترل از پنجره...استفاده میکنیم. ب( Properties الف( Solution Explorer د( Class View ج( Toolbox 8 برای دیدن پروژه و فایلهای آن از پنجره... استفاده میشود ب( Properties الف( Solution Explorer د( Class View ج( Toolbox 9 اگر بخواهیم در محیط طراحی یک کنترل را به فرم اضافه کنیم از پنجره... آن را به داخل فرم میآوریم. ب( Properties الف( Solution Explorer د( Class View ج( Toolbox 10 ویژگی SizeMode برای تنظیم چه چیزی از کنترل PictureBox به کار برده میشود ب( تصویر درون کنترل الف( مکان تصویر د( اندازه کنترل ج( نوع تعیین اندازه تصویر 11 برای ثابت نگه داشتن فاصله از طرفین برای یک کنترل از کدام ویژگی استفاده مینماییم ب( Text الف( Dock
ج( Location د( Anchor 12 اگر ویژگی FormBorderStyle برابر با Sizable شود فرم... خواهد بود. الف( با اندازه ثابت ب( یک کادر محاوره ای ج( بدون دکمه های بیشینه و کمینه د( با اندازه متغیر ج( جاهای خالی را با عبارات مناسب پرکنید. 13 اطالعی که از طرف سیستم عامل به برنامه داده می شود...نامیده می شود. 14 ویژگی RightToLeft برای زبان های... پیش بینی شده است 15 در کنترل PictureBox ویژگی که تصویر را در بر می گیرد...است. 159
تمرینات برنامه نویسی فصل پنجم 1 فرم زیر را برای نمایش اطالعات شخصی خود ( نام نام خانوادگی نام پدر تاریخ تولد و عکس( طراحی کنید. 2 فرم تمرین 1 برای نمایش اطالعات به زبان فارسی که یک زبان RTL است مناسب نیست. با تغییر ویژگی های فرم و برچسب ها فرم را برای زبان RTL مناسب کنید. 160